const fs = require('fs');
const path = require('path');

// 模拟 Egg.js 上下文
const mockCtx = {
  logger: {
    info: (...args) => console.log('[INFO]', ...args),
    error: (...args) => console.error('[ERROR]', ...args),
    warn: (...args) => console.warn('[WARN]', ...args)
  }
};

// 模拟 PurchaseOrderService
class PurchaseOrderService {
  constructor(ctx) {
    this.ctx = ctx;
  }

  // 提取淘宝采购订单数据
  extractTaobaoPurchaseOrders(item) {
    const { ctx } = this;
    const orders = [];
    
    try {
      // 解析响应数据 - 注意数据在 response.data.data 中
      const responseData = item.response.data.data;
      
      // 遍历所有订单容器
      for (const key in responseData) {
        if (key.startsWith('shopOrderContainer_')) {
          const orderId = key.split('_')[1];
          
          // 获取订单信息
          const shopInfo = responseData[`shopInfo_${orderId}`];
          const orderPayment = responseData[`orderPayment_${orderId}`];
          
          if (!shopInfo || !orderPayment) {
            continue;
          }
          
          // 解析订单基本信息
          const orderDate = new Date(shopInfo.fields.createTime);
          const totalAmount = parseFloat(orderPayment.fields.actualFee.value.replace('￥', '')) || 0;
          
          // 创建订单对象
          const order = {
            orderNumber: orderId, // 订单号
            supplierId: 1, // 供应商ID（需要根据店铺信息匹配，这里暂时设为1）
            purchaser: '系统导入', // 采购员
            orderDate: orderDate, // 下单日期
            expectedDeliveryDate: null, // 预计交货日期
            totalAmount: totalAmount, // 实付款
            remark: `淘宝进货单 - ${shopInfo.fields.shopName}`, // 备注
            items: []
          };
          
          // 解析订单项 - 使用正确的模式 orderItemInfo_{orderId}_{subOrderId}
          for (const itemKey in responseData) {
            if (itemKey.startsWith(`orderItemInfo_${orderId}_`)) {
              const itemInfo = responseData[itemKey];
              const itemData = itemInfo.fields.item;
              
              // 解析商品信息
              const price = parseFloat(itemData.priceInfo.actualTotalFee.replace('￥', '')) || 0;
              const quantity = parseInt(itemData.quantity) || 0;
              const amount = price * quantity;
              
              // 合并规格信息
              let specification = '';
              if (itemData.skuInfo && Array.isArray(itemData.skuInfo)) {
                specification = itemData.skuInfo.map(sku => sku.skuValue).join(';');
              }
              
              order.items.push({
                productId: null, // 产品ID
                productName: itemData.title, // 品名
                specification: specification, // 规格
                quantity: quantity, // 数量
                unit: '件', // 单位
                unitPrice: price, // 价格
                amount: amount, // 金额
                remark: '' // 备注
              });
            }
          }
          
          // 如果有订单项，则添加到订单列表
          if (order.items.length > 0) {
            orders.push(order);
          }
        }
      }
      
      ctx.logger.info(`[PluginData] 成功提取 ${orders.length} 条淘宝采购订单数据`);
      return orders;
    } catch (error) {
      ctx.logger.error('[PluginData] 提取淘宝采购订单数据失败:', error);
      return [];
    }
  }
}

// 读取淘宝进货单数据
const taobaoDataPath = path.join(__dirname, '通过插件拦截响应数据（淘宝进货单）.md');
let taobaoData;

try {
  const data = fs.readFileSync(taobaoDataPath, 'utf8');
  taobaoData = JSON.parse(data);
  console.log('成功读取淘宝进货单数据');
} catch (error) {
  console.error('读取淘宝进货单数据失败:', error);
  process.exit(1);
}

// 测试数据提取功能
const service = new PurchaseOrderService(mockCtx);
const firstItem = taobaoData.data[0]; // 获取第一个数据项

console.log('开始提取淘宝采购订单数据...');
const extractedOrders = service.extractTaobaoPurchaseOrders(firstItem);

console.log('\n提取结果:');
console.log('订单数量:', extractedOrders.length);

// 显示第一个订单的详细信息
if (extractedOrders.length > 0) {
  const firstOrder = extractedOrders[0];
  console.log('\n第一个订单详情:');
  console.log('订单号:', firstOrder.orderNumber);
  console.log('下单日期:', firstOrder.orderDate);
  console.log('总金额:', firstOrder.totalAmount);
  console.log('备注:', firstOrder.remark);
  console.log('订单项数量:', firstOrder.items.length);
  
  // 显示订单项详情
  console.log('\n订单项详情:');
  firstOrder.items.forEach((item, index) => {
    console.log(`  项目 ${index + 1}:`);
    console.log(`    品名: ${item.productName}`);
    console.log(`    规格: ${item.specification}`);
    console.log(`    数量: ${item.quantity}`);
    console.log(`    单价: ${item.unitPrice}`);
    console.log(`    金额: ${item.amount}`);
  });
} else {
  console.log('未提取到任何订单数据');
}